/*******************************************************************************
 * * GAME PLAYER CLASS
 ******************************************************************************/

var Jugador = function() {
	var id = -1, x = 10, y = 10, width = 32, height = 32, esJugadorUno, idPersonajeActual, piloto, avion, blindado1, blindado2, drone, hayDisparo = false;
	var humanPlayer = false;
	
	var playerBullets = [];
	
	var gethumanPlayer = function() {
		return humanPlayer;
	};

	var sethumanPlayer = function(newHuman) {
		humanPlayer = newHuman;
	};
	
	// Getters and setters
	var getId = function() {
		return id;
	};

	var getEsJugadorUno = function() {
		return esJugadorUno;
	};

	var setEsJugadorUno = function(newEsJugadorUno) {
		esJugadorUno = newEsJugadorUno;
	};
	
	var getOrientacion = function(personaje) {
		var ret;
		if (getEsJugadorUno()) {
			switch (parseInt(personaje)) {
			// piloto
			case 0:
				ret = piloto.getOrientacion();
				break;
			// avion
			case 1:
				ret = avion.getOrientacion();
				break;
			// drone
			case 2:
				break;
			}
		} else {
			switch (parseInt(personaje)) {
			// blindado1
			case 0:
				ret = blindado1.getOrientacion();
				break;
			// blindado2
			case 1:
				ret = blindado2.getOrientacion();
				break;
			}
		}
		return parseFloat(ret);
	};

	var getAvion = function() {
		return avion;
	};
	
	var getDrone = function() {
		return drone;
	};

	var getHayDisparo = function() {
		return hayDisparo;
	};

	var setHayDisparo = function(newHayDisparo) {
		hayDisparo = newHayDisparo;
	};

	var setAvion = function(newAvion) {
		avion = newAvion;
	};
	
	var setDrone = function(newDrone) {
		drone = newDrone;
	};

	var getPiloto = function() {
		return piloto;
	};

	var setPiloto = function(newPiloto) {
		piloto = newPiloto;
	};

	var getBlindado1 = function() {
		return blindado1;
	};

	var setBlindado1 = function(newBlindado) {
		blindado1 = newBlindado;
	};

	var getBlindado2 = function() {
		return blindado2;
	};

	var setBlindado2 = function(newBlindado2) {
		blindado2 = newBlindado2;
	};
	
	var setOrientacion = function(newOrientacion, personaje) {
		if (getEsJugadorUno()) {
			switch (parseInt(personaje)) {
			// piloto
			case 0:
				piloto.setOrientacion(newOrientacion);
				break;
			// avion
			case 1:
				avion.setOrientacion(newOrientacion);
				break;
			// drone
			case 2:
				break;
			}
		} else {
			switch (parseInt(personaje)) {
			// blindado1
			case 0:
				blindado1.setOrientacion(newOrientacion);
				break;
			// blindado2
			case 1:
				blindado2.setOrientacion(newOrientacion);
				break;
			}
		}
	};

	var getPlayerBullets = function() {
		return playerBullets;
	};

	var getX = function() {
		var ret;
		if (getEsJugadorUno()) {
			switch (parseInt(getIdPersonajeActual())) {
			// piloto
			case 0:
				ret = piloto.getX();
				break;
			// avion
			case 1:
				ret = avion.getX();
				break;
			// drone
			case 2:
				ret = drone.getX();
				break;
			}
		} else {
			switch (parseInt(getIdPersonajeActual())) {
			// blindado1
			case 0:
				ret = blindado1.getX();
				break;
			// blindado2
			case 1:
				ret = blindado2.getX();
				break;
			}
		}
		return parseFloat(ret);
	};

	var getY = function() {
		var ret;
		if (getEsJugadorUno()) {
			switch (parseInt(getIdPersonajeActual())) {
			// piloto
			case 0:
				ret = piloto.getY();
				break;
			// avion
			case 1:
				ret = avion.getY();
				break;
			// drone
			case 2:
				ret = drone.getY();
				break;
			}
		} else {
			switch (parseInt(getIdPersonajeActual())) {
			// blindado1
			case 0:
				ret = blindado1.getY();
				break;
			// blindado2
			case 1:
				ret = blindado2.getY();
				break;
			}
		}
		return parseFloat(ret);
	};

	var getVida = function(personaje) {
		var ret;
		if (getEsJugadorUno()) {
			switch (personaje) {
			// piloto
			case 0:
				ret = piloto.getVida();
				break;
			// avion
			case 1:
				ret = avion.getVida();
				break;
			// drone
			case 2:
				ret = drone.getVida();
				break;
			}
		} else {
			switch (personaje) {
			// blindado1
			case 0:
				ret = blindado1.getVida();
				break;
			// blindado2
			case 1:
				ret = blindado2.getVida();
				break;
			}
		}
		return parseInt(ret);
	};
	
	var getVelocidad = function() {
		var ret;
		if (getEsJugadorUno()) {
			switch (parseInt(getIdPersonajeActual())) {
			// piloto
			case 0:
				ret = piloto.getVelocidad();
				break;
			// avion
			case 1:
				ret = avion.getVelocidad();
				break;
			// drone
			case 2:
				ret = drone.getVelocidad();
				break;
			}
		} else {
			switch (parseInt(getIdPersonajeActual())) {
			// blindado1
			case 0:
				ret = blindado1.getVelocidad();
				break;
			// blindado2
			case 1:
				ret = blindado2.getVelocidad();
				break;
			}
		}
		return parseInt(ret);
	};

	var getVision = function() {
		var ret;
		if (getEsJugadorUno()) {
			switch (parseInt(getIdPersonajeActual())) {
			// piloto
			case 0:
				ret = piloto.getVision();
				break;
			// avion
			case 1:
				ret = avion.getVision();
				break;
			// drone
			case 2:
				ret = drone.getVision();
				break;
			}
		} else {
			switch (parseInt(getIdPersonajeActual())) {
			// blindado1
			case 0:
				ret = blindado1.getVision();
				break;
			// blindado2
			case 1:
				ret = blindado2.getVision();
				break;
			}
		}
		return parseInt(ret);
	};

	var getMunicionArt = function() {
		var ret;
		if (getEsJugadorUno()) {
			switch (parseInt(getIdPersonajeActual())) {
			// piloto
			case 0:
				break;
			// avion
			case 1:
				ret = avion.getMunicionArt();
				break;
			// drone
			case 2:
				break;
			}
		} else {
			switch (parseInt(getIdPersonajeActual())) {
			// blindado1
			case 0:
				ret = blindado1.getMunicionArt();
				break;
			// blindado2
			case 1:
				ret = blindado2.getMunicionArt();
				break;
			}
		}
		return parseInt(ret);
	};

	var getMunicionBomba = function() {
		var ret;
		if (getEsJugadorUno()) {
			switch (parseInt(getIdPersonajeActual())) {
			// piloto
			case 0:
				break;
			// avion
			case 1:
				ret = avion.getMunicionBomba();
				break;
			// drone
			case 2:
				break;
			}
		}
		return parseInt(ret);
	};

	var getWidth = function() {
		return width;
	};

	var getHeight = function() {
		return height;
	};

	var getIdPersonajeActual = function() {
		return idPersonajeActual;
	};

	var setId = function(newId) {
		id = newId;
	};

	var setX = function(newX, personaje) {
		if (getEsJugadorUno()) {
			switch (parseInt(personaje)) {
			// piloto
			case 0:
				piloto.setX(newX);
				break;
			// avion
			case 1:
				avion.setX(newX);
				break;
			// drone
			case 2:
				drone.setX(newX);
				break;
			}
		} else {
			switch (parseInt(personaje)) {
			// blindado1
			case 0:
				blindado1.setX(newX);
				break;
			// blindado2
			case 1:
				blindado2.setX(newX);
				break;
			}
		}
	};

	var setY = function(newY, personaje) {
		if (getEsJugadorUno()) {
			switch (parseInt(personaje)) {
			// piloto
			case 0:
				piloto.setY(newY);
				break;
			// avion
			case 1:
				avion.setY(newY);
				break;
			// drone
			case 2:
				drone.setY(newY);
				break;
			}
		} else {
			switch (parseInt(personaje)) {
			// blindado1
			case 0:
				blindado1.setY(newY);
				break;
			// blindado2
			case 1:
				blindado2.setY(newY);
				break;
			}
		}
	};

	var setVida = function(newVida, personaje) {
		if (getEsJugadorUno()) {
			switch (parseInt(personaje)) {
			// piloto
			case 0:
				piloto.setVida(newVida);
				break;
			// avion
			case 1:
				avion.setVida(newVida);
				break;
			// drone
			case 2:
				drone.setVida(newVida);
				break;
			}
		} else {
			switch (parseInt(personaje)) {
			// blindado1
			case 0:
				blindado1.setVida(newVida);
				break;
			// blindado2
			case 1:
				blindado2.setVida(newVida);
				break;
			}
		}
	};
	
	var setVelocidad = function(newVelocidad, personaje) {
		if (getEsJugadorUno()) {
			switch (parseInt(personaje)) {
			// piloto
			case 0:
				piloto.setVelocidad(newVelocidad);
				break;
			// avion
			case 1:
				avion.setVelocidad(newVelocidad);
				break;
			// drone
			case 2:
				drone.setVelocidad(newVelocidad);
				break;
			}
		} else {
			switch (parseInt(personaje)) {
			// blindado1
			case 0:
				blindado1.setVelocidad(newVelocidad);
				break;
			// blindado2
			case 1:
				blindado2.setVelocidad(newVelocidad);
				break;
			}
		}
	};

	var setVision = function(newVision, personaje) {
		if (getEsJugadorUno()) {
			switch (parseInt(personaje)) {
			// piloto
			case 0:
				piloto.setVision(newVision);
				break;
			// avion
			case 1:
				avion.setVision(newVision);
				break;
			// drone
			case 2:
				drone.setVision(newVision);
				break;
			}
		} else {
			switch (parseInt(personaje)) {
			// blindado1
			case 0:
				blindado1.setVision(newVision);
				break;
			// blindado2
			case 1:
				blindado2.setVision(newVision);
				break;
			}
		}
	};

	var setMunicionArt = function(newMun, personaje) {
		if (getEsJugadorUno()) {
			switch (parseInt(personaje)) {
			// piloto
			case 0:
				break;
			// avion
			case 1:
				avion.setMunicionArt(newMun);
				break;
			// drone
			case 2:
				break;
			}
		} else {
			switch (parseInt(personaje)) {
			// blindado1
			case 0:
				blindado1.setMunicionArt(newMun);
				break;
			// blindado2
			case 1:
				blindado2.setMunicionArt(newMun);
				break;
			}
		}
	};

	var setMunicionBomba = function(newMun, personaje) {
		if (getEsJugadorUno()) {
			switch (parseInt(personaje)) {
			// piloto
			case 0:
				break;
			// avion
			case 1:
				avion.setMunicionBomba(newMun);
				break;
			// drone
			case 2:
				break;
			}
		}
	};

	var setWidth = function(newWidth) {
		width = newWidth;
	};

	var setHeight = function(newHeight) {
		height = newHeight;
	};

	var setPlayerBullets = function(balas) {
		playerBullets = balas;
	};

	var setIdPersonajeActual = function(newIdPersonajeActual) {
		idPersonajeActual = newIdPersonajeActual;
	};

	var draw = function(canvas) {
		if (getEsJugadorUno()) {
				piloto.draw(canvas, this.getOrientacion(0));
				avion.draw(canvas, this.getOrientacion(1));
				drone.draw(canvas);
		} else {
			blindado1.draw(canvas, this.getOrientacion(0));
		    blindado2.draw(canvas,this.getOrientacion(1));
		}
	};

	var Bullet = function Bullet(I) {
		I.active = true;

		I.xVelocity = I.speed;
		I.yVelocity = I.speed;
		I.width = 3;
		I.height = 3;
		I.color = "#000";
		I.alcance = 100;

		I.fueraAlcance = function() {

			switch (I.direccion) {
			// arriba
			case 8:
				return (getY()) - (I.alcance) < I.y;
				break;
			// abajo
			case 2:
				return (getY()) + (I.alcance) > I.y;
				break;
			// izquierda
			case 4:
				return (getX()) - (I.alcance) < I.x;
				break;
			// derecha
			case 6:
				return (getX()) + (I.alcance) > I.x;
				break;
			}

		};

		I.inBounds = function(canvasW, canvasH) {
			return I.x >= 0 && I.x <= canvasW && I.y >= 0 && I.y <= canvasH;
		};

		I.draw = function(canvas) {
			canvas.fillStyle = this.color;
			canvas.fillRect(this.x, this.y, this.width, this.height);
		};

		I.update = function(canW, canH) {

			switch (I.direccion) {
			// arriba
			case 8:
				I.y += -I.yVelocity;
				break;
			// abajo
			case 2:
				I.y += I.yVelocity;
				break;
			// izquierda
			case 4:
				I.x += (-I.xVelocity);
				break;
			// derecha
			case 6:
				I.x += I.xVelocity;
				break;
			}

			I.active = I.active && I.inBounds(canW, canH) && I.fueraAlcance();
		};

		I.explode = function() {
			this.active = false;
			// Extra Credit: Add an explosion graphic
		};

		I.getX = function() {
			return I.x;
		};

		I.getY = function() {
			return I.y;
		};

		I.getWidth = function() {
			return I.width;

		};

		I.getHeight = function() {
			return I.height;
		};

		I.getIdPersonajeActual = function(){
			return I.idPersonajeActual;
		};

		return I;
	};

	var shoot = function(direc) {
		// Sound.play("shoot");
		if(gethumanPlayer()){
			hayDisparo = true;
			setHayDisparo(hayDisparo);	
		}

		var bulletPosition = midpoint();

		playerBullets.push(Bullet({
			speed : 10,
			x : bulletPosition.x,
			y : bulletPosition.y,
			direccion : direc,
			idPersonajeActual: getIdPersonajeActual()
		}));
	};

	var midpoint = function() {
		return {

			x : parseFloat(getX()) + parseFloat(getWidth()) / 2,
			y : parseFloat(getY()) + parseFloat(getHeight()) / 2
		};
	};

	// Define which variables and methods can be accessed
	return {
		getX : getX,
		getY : getY,
		getOrientacion : getOrientacion,
		setOrientacion : setOrientacion,
		getPlayerBullets : getPlayerBullets,
		setPlayerBullets : setPlayerBullets,
		getWidth : getWidth,
		getHeight : getHeight,
		getId : getId,
		getIdPersonajeActual : getIdPersonajeActual,
		setX : setX,
		setY : setY,
		setWidth : setWidth,
		setHeight : setHeight,
		setId : setId,
		draw : draw,
		shoot : shoot,
		midpoint : midpoint,
		Bullet : Bullet,
		setIdPersonajeActual : setIdPersonajeActual,
		getAvion : getAvion,
		setAvion : setAvion,
		getPiloto : getPiloto,
		setPiloto : setPiloto,
		getEsJugadorUno : getEsJugadorUno,
		setEsJugadorUno : setEsJugadorUno,
		getBlindado1 : getBlindado1,
		setBlindado1 : setBlindado1,
		getBlindado2 : getBlindado2,
		setBlindado2 : setBlindado2,
		getHayDisparo : getHayDisparo,
		setHayDisparo : setHayDisparo,
		setVida : setVida,
		setMunicionArt : setMunicionArt,
		setMunicionBomba : setMunicionBomba,
		getVida : getVida,
		getMunicionArt : getMunicionArt,
		getMunicionBomba : getMunicionBomba,
		getVision : getVision,
		setVision : setVision,
		getVelocidad:getVelocidad,
		setVelocidad:setVelocidad,
		sethumanPlayer:sethumanPlayer,
		gethumanPlayer:gethumanPlayer,
		getDrone:getDrone,
		setDrone:setDrone
	};
};